res = []
def swap(s, i, j):
    if i == j:
        return s
    else:
        return ''.join((s[:i], s[j], s[i+1:j], s[i], s[j+1:]))
        #str.join()方法，如'-'.join('a','b')执行结果为a-b，''.join('a','b')执行结果为ab
def permute(s, start):
    #1个字符不处理
    if len(s) < 2:
        res.append(s)
        return
    #递归出口，子字符串长度为2，则该字符串是结果，交换这个字符串之后，又是一个结果，保存之
    #s[start:]表示从s的起始位（第零位）开始截取后面的列表元素，表达式为s[start:step:stop],若列表有8个元素，则stop默认值为7
    if (len(s[start:]) == 2):
        res.append(s)
        snew = swap(s, start, start+1)
        res.append(snew)
        return
    
    #字符串长度大于等于3，则依次将子串的第一个字符和自己以及后续字符交换，得到新的字符串
    #继续递归处理
    for i in range(start, len(s)):
        snew = swap(s, start, i)
        permute(snew, start+1)

a = 'abc'
permute(a, 0)
print(res)